package com.yt.sys.service;

import org.apache.dubbo.config.annotation.DubboService;
import org.springframework.beans.BeanUtils;
import javax.annotation.Resource;
import com.yt.sys.common.config.YmlConfig;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.yt.sys.mapper.EmpAddressMapper;
import com.yt.sys.models.service.IEmpAddressService;
import com.yt.sys.models.bo.EmpAddressSaveBO;
import com.yt.sys.models.bo.EmpLocationUpdateBO;
import com.yt.sys.models.dto.EmpAddressDTO;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import java.util.Date;

/**
 * 员工位置信息控制器
 *
 * @author yzz
 * @Date 2025-09-17 14:29:56
 */
@DubboService
public class EmpAddressServiceImpl extends ServiceImpl<EmpAddressMapper, EmpAddressDTO> implements IEmpAddressService{

    @Resource
    private YmlConfig ymlConfig;

    @Override
    public boolean add(EmpAddressSaveBO saveBO) {
        EmpAddressDTO dto = new EmpAddressDTO();
        BeanUtils.copyProperties(saveBO,dto);
        Long id = ymlConfig.getPkId();
        dto.setId(id);
        return this.insert(dto);
    }
    
    @Override
    public boolean updateLocation(EmpLocationUpdateBO locationBO) {
        // 查询是否已存在该员工的位置信息
        EntityWrapper<EmpAddressDTO> wrapper = new EntityWrapper<>();
        wrapper.eq("emp_id", locationBO.getEmpId());
        EmpAddressDTO existing = this.selectOne(wrapper);
        
        EmpAddressDTO dto = new EmpAddressDTO();
        Date now = new Date();
        
        if (existing != null) {
            // 如果存在，则更新现有记录
            dto.setId(existing.getId());
            dto.setRevision(existing.getRevision());
            dto.setCreateTime(existing.getCreateTime()); // 保留原有的创建时间
        } else {
            // 如果不存在，则创建新记录
            Long id = ymlConfig.getPkId();
            dto.setId(id);
            dto.setCreateTime(now); // 设置创建时间为当前时间
        }
        
        // 设置传入的参数
        dto.setEmpId(locationBO.getEmpId());
        dto.setAddress(locationBO.getAddress());
        dto.setLongitude(locationBO.getLongitude());
        dto.setLatitude(locationBO.getLatitude());
        dto.setUpdateTime(now); // 每次都更新为当前时间
        
        if (existing != null) {
            // 更新记录
            return this.updateById(dto);
        } else {
            // 创建新记录
            return this.insert(dto);
        }
    }
}